When designing and programming a desktop or server application, a high level of abstraction, with respect to underlying computer resources, provides scalability for the desktop or server application. A platform, such as, for example, a platform using .NET framework, developed by Microsoft Corporation of Redmond, Wash. may be employed to execute programs. A programmer, using service-based design and multi-threading techniques, may not be concerned with which part of a system executes a program because the platform provides the high level of abstraction.
Embedded systems are prevalent in today's computer systems. Embedded systems may be developed to be implemented with custom hardware and often are executed in real-time environments. Examples of embedded systems include, but are not limited to, mobile telephones, set-top boxes, personal-digital assistants (PDAs), telecommunication switching systems, aircraft systems, and spacecraft systems.
In embedded systems design, a high level of abstraction, as described above, may adversely affect the embedded systems making performance unpredictable. Further, specific aspects of hardware devices may be lost in the high level of abstraction. For example, physical connections to physical interfaces may be abstracted, but later may be re-introduced by using additional parameters in thread control functions, and I/O drivers. In addition, the high level of abstraction makes it impossible for a programmer to refer to a specific central processing unit (CPU) or CPU-like device without breaking the abstraction.
In systems, including, but not limited to, the .NET framework, to communicate with a hardware component, an application may communicate with a driver, executing proprietary code, which may then access the hardware component. Each different hardware component may use a different driver. As a result, the programmer learns how the application interfaces with each of the different drivers before programming the application to call the drivers.